﻿// 3454. 字符串排序III.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>

using namespace std;
/*
https://www.acwing.com/problem/content/3457/

按要求输入字符串进行排序并输出。

输入格式
输入包含多组测试数据。

每组测试数据，第一行包含整数 N，表示共有 N个字符串。

接下来，会将这 N个字符串，按一行一个的形式给出。

但是，逐个给出的过程中，有可能会直接输入一行 stop，表示该组数据停止输入，此时会直接开始下一组数据的输入。

也就是说，每组数据给出的字符串个数，可能不到 N个。

另外，stop 不算给出的字符串。

输出格式
对于每组数据，将给出的所有字符串按长度由小到大排序输出。

每行输出一个字符串，注意不要将 stop 算在内。

数据范围
每个输入最多包含 100 个数据。
每组数据最多包含 100个字符串，每个字符串的长度不超过 100，且不同字符串长度互不相同。

输入样例：
5
sky is grey
cold
very cold
stop
3
it is good enough to be proud of
good
it is quite good
输出样例：
cold
very cold
sky is grey
good
it is quite good
it is good enough to be proud of
*/


int n;
char str[500];

vector<vector<char>> vv;

void insertV(char str[]) {
	int len = strlen(str);
	vector<char> sv;
	for (int i = 0; i < len; i++) {
		sv.push_back(str[i]);
	}
	vv.push_back(sv);
	return;
}

bool cmp(const vector<char>& a, const vector<char>& b) {
	return a.size() < b.size();
}

int main()
{
	while (cin >> n) {
		cin.getline(str, 200);
		vv.clear();
		for (int i = 0; i < n; i++) {
			cin.getline(str, 200);
			if (strlen(str) == 4 && str[0] == 's' && str[1] == 't' && str[2] == 'o' && str[3] == 'p') {
				break;
			}
			insertV(str);
		}
		sort(vv.begin(), vv.end(), cmp);

		for (int i = 0; i < vv.size(); i++) {
			for (int j = 0; j < vv[i].size(); j++) {
				cout << vv[i][j];
			}
			cout << endl;
		}
	}
}

